package servivos;

import java.util.ArrayList;

/**
 * Todos os seres vivos devem herdar dessa classe
 * ela é abstract porque vc não pode criar um objeto
 * "serVivo" apenas. 
 */
public abstract class SerVivo {

	// private -- so essa classe tem acesso
	private int idade = 0;
	
	// true enquanto o ser estiver vivo
	// protected -- as classes que herdam dessa tambem tem acesso
	protected boolean vivo = true;
	
	// pergunta a esse ser vivo se ele nao ja morreu :P
	public boolean estaVivo()
	{
		return vivo;
	}
	
	public void envelhecerUmDia()
	{
		idade++;
		// essa eh uma funcao abstrata
		// que cada ser deve implementar da sua maneira
		passarUmDia();
	}
	
	/**
	 * Toda classe que extender SerVivo tem que implementar essa
	 * classe ou ser abstrata também.
	 */
	public abstract void passarUmDia();
	
	/**
	 * Essa também é uma classe abstrata
	 * já que cada ser vivo gera decendentes
	 * de maneira diferente
	 * 
	 * ArrayList é uma Collection que é muito
	 * parecida com os vetores que estamos acostumados
	 * de C
	 */
	public abstract ArrayList<SerVivo> gerarDescendentes();
	
}
